GitBook
객체지향의 사실과 오해

2장 객체의 상태, 식별자, 행동

객체를 발견하고 창조하는 것은 지식과 행동을 구조화 하는 것이다

#책

#객체지향

#객체지향의사실과오해

2022년 04월 07일

객체지향의 사실과 오해를 읽고 개인적으로 정리한 내용입니다

객체를 발견하고 창조하는 것은 지식과 행동을 구조화 하는 것이다

인간이 생각하는 객체


인간은 개념적으로 경계 지을 수 있는 추상적인 사물까지도 객체로 인식할 수 있다
이런 능력은 세상의 복잡성을 극복하기 위한 인간의 노력이다
즉 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적, 개념적 경계를 지닌 무언가다

객체지향에서의 객체


하나의 개별적인 실체로 식별 가능한 경계를 지닌 무언가는 객체지향에서 객체가 될 수 있으며
객체는 다음으로 구성된다

  • 상태 (state)
  • 행동 (behavior)
  • 식별자 (identity)

1.상태 ( State )

상태는 무엇인가?

상태는 특정 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다
객체의 상태는 정적인 프로퍼티(변하지 않는), 동적인 프로퍼티(변하는)로 구성된다

왜 상태가 필요한가?

과거에 발생한 행동의 이력을 통해 결과를 판단하는 것은 복잡하다
상태를 사용하면 행동 이력을 고려하지 않고도 결과를 쉽게 예측할 수 있다

2.행동 ( Behavior )

행동은 무엇인가?

행동이란 외부의 요청, 수신된 메시지에 응답하기 위해 동작하는 활동이다
행동으로 자신의 상태를 변경하거나 다른 객체에 메시지를 전달할 수 있다

상태와 행동의 관계

객체는 다른 객체의 상태에 직접적으로 접근할 수도, 상태를 변경할 수도 없다
객체는 자신의 행동에 의해서만 상태가 변경되며 이것을 통해 객체의 자율성을 유지한다
따라서 상태와 행동에는 다음과 같은 관계가 있다

  • 객체의 행동은 자신의 상태에 영향을 받는다
  • 객체의 행동은 자신의 상태를 변경시킨다

협력과 행동 그리고 캡슐화

객체는 큰 협력관계 속에서 수신된 메시지에 따라 행동으로 협력에 참여하고 그 결과로 자신의 상태를 변경한다
이 과정에서 상태를 변경하는 것(어떤 방식으로 동작할 것인지)은 해당 객체가 주도권을 가지며 이것이 캡슐화이다
캡슐화된 객체의 상태에 접근하는 방법은 행동이 유일하다
결과적으로 상태를 행동 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다

3.식별자 ( Identity )

식별자란 무엇인가?

모든 객체는 식별자를 가지며 식별자를 이용해서 객체를 구별할 수 있다

값(value)과 객체의 차이

값과 객체의 차이점은 식별자의 존재 여부다
값은 숫자, 문자, 날짜와 같은 수치를 표현하며 값의 경우 두 인스턴스의 수치가 같다면 두 인스턴스는 같은 것으로 판단한다
하지만 객체는 두 인스턴스의 상태가 완전히 똑같더라도 독립적인 객체로 다뤄야 한다

  • 값은 상태를 이용한 동등 검사를 통해 서로 같은지 판단한다
  • 객체는 식별자를 이용한 동등 검사를 통해 서로 같은지 판단한다

상태를 먼저 정하지 마라


협력에 참여하는 객체를 만들기 위해서는 상태가 아닌 행동에 초점을 맞춰야 한다
협력안에서 객체의 행동은 결국 협력에 참여하면서 완수해야 하는 책임을 의미하며 이 행동을 결정한 후에야
비로소 행동에 필요한 상태가 무엇인지를 고려해야 한다
따라서 어떤 책임이 필요한가를 결정하는 과정이 전체 설계를 주도해야한다 (책임 주도 설계 RDD)

정리


  • 객체는 상태, 행동, 식별자를 가진다
  • 상태는 행동으로만 변경할 수 있다
    • 행동의 결과는 상태에 의존적이다
    • 행동의 순서가 실행 결과에 영향을 미친다
  • 객체는 식별자를 통해 유일한 존재로 식별할 수 있다